home *** CD-ROM | disk | FTP | other *** search
/ Directorty Opus 5 - Magellan 2 / Opus 5 - Magellan 2.iso / Extras / DLGoodies / emacs.dopus5 < prev    next >
Text File  |  1996-08-29  |  3KB  |  117 lines

  1. /*
  2.  *  Load selected files and directories from a DOpus5 lister into Emacs.
  3.  *  If an Emacs port is found, entries are loaded into a running Emacs.
  4.  *  Otherwise Emacs is invoked first, using appropriate stack size.
  5.  *  
  6.  *  V1.0 (20.7.96) by David Lübbren.
  7.  *
  8.  *  Note: As I start the 'fifo-handler' in my User-startup I only test
  9.  *        for its presence in this script.
  10.  *
  11.  *  Tested using Emacs 18.59 Amiga port 1.29DG, DirectoryOpus 5.11 and
  12.  *  fifo.library 38.2.
  13.  *
  14.  *  Call: Arexx DOpus5:Arexx/emacs.dopus5 {Qp}
  15.  *
  16.  */
  17.  
  18. StackSize  = 60000
  19. EmacsPort  = 'EMACS1'
  20. FifoPort   = 'FIFO-PORT'
  21. EmacsCmd   = 'Run <nil: >nil: GNUEmacs:temacs'
  22. DefaultDir = 'ram:'
  23. message    = 'Loading into Emacs...'
  24.  
  25.  
  26.  
  27. lf         = '0a'x
  28.  
  29. OPTIONS RESULTS
  30.  
  31. PARSE ARG dopusport
  32. IF dopusport ~= "" THEN ADDRESS VALUE dopusport
  33. ELSE DO
  34.   SAY "No DOpus running !"
  35.   EXIT
  36. END
  37.  
  38. SourcePath = DefaultDir
  39. NoLister   = 1
  40.  
  41. lister query source
  42. IF rc = 0 THEN DO
  43.   PARSE VAR result handle .
  44.   NoLister = 0
  45.   lister set handle busy on
  46.   lister query handle path
  47.   IF rc = 0 THEN DO
  48.     SourcePath = STRIP(result, 'B', '"')
  49.     lister query handle selentries stem Entry.
  50.   END
  51. END
  52.  
  53.  
  54. IF ~SHOW('Ports', EmacsPort) THEN DO
  55.   IF ~SHOW('Ports', FifoPort) THEN DO
  56.     /*
  57.      *  ADDRESS COMMAND 'Run <NIL: >NIL: L:fifo-handler'
  58.      *  ADDRESS COMMAND 'Waitport' FifoPort
  59.      */
  60.     dopus request '"Warning: fifo-handler not running 'lf' no external processes runnable" Ok'
  61.   END
  62.   PRAGMA('Stack', StackSize)
  63.   PRAGMA('Directory', SourcePath)
  64.   ADDRESS COMMAND 
  65.   EmacsCmd
  66.   'WaitForPort' EmacsPort
  67.   ADDRESS
  68.   IF rc = 5 THEN DO
  69.     dopus request '"Can''t find emacs port '''EmacsPort'''" Cancel'
  70.     SIGNAL quitit
  71.   END
  72. END  
  73.  
  74.  
  75. IF NoLister = 0 & Entry.count > 0 THEN DO
  76.   lister set handle progress Entry.count message
  77.   lister set handle title message
  78.   lister refresh handle full
  79.       
  80.   DO i=0 TO Entry.count-1
  81.     lister query handle abort
  82.     IF result THEN
  83.       SIGNAL quitit
  84.  
  85.     lister set handle progress count i+1
  86.     lister set handle progress name Entry.i
  87.  
  88.     ADDRESS VALUE EmacsPort
  89.     '(find-file "' || SourcePath || Entry.i || '")'
  90.     ADDRESS
  91.     lister select handle '"' || Entry.i || '"' off
  92.     lister refresh handle
  93.   END
  94. END
  95.  
  96. /*
  97.  * Uniconify Emacs and pull up front.
  98.  */
  99.  
  100. ADDRESS VALUE EmacsPort
  101. '(if (car (amiga-get-window-geometry)) (amiga-iconify))'
  102. '(amiga-window-to-front)'
  103. '(amiga-activate-window)'
  104. ADDRESS
  105.  
  106. SIGNAL quitit
  107.  
  108.  
  109. quitit:
  110.   IF NoLister = 0 THEN DO
  111.     lister set handle title
  112.     lister refresh handle full
  113.     lister set handle busy off
  114.   END
  115.   EXIT
  116.  
  117.